\documentclass{ctexart}
\usepackage{graphicx} %插入图片的宏包
\usepackage{diagbox}
\usepackage{float} %设置图片浮动位置的宏包
\usepackage{subfigure}
\usepackage{amsmath}
\title{Data Structure and Algorithms Report 2}
\date{1 November 2023}
\author{王惠恒 3200300395}
\usepackage{geometry}
 \geometry{
 a4paper,
 total={170mm,257mm},
 left=20mm,
 top=5mm,
 }
\begin{document}
\maketitle

\section{代码介绍与说明}
这是一个可以进行四则运算的程序。主要的成员函数有
\begin{verbatim}
private:
    string s;
    
public:
    calculator( ){}
    calculator(const string &input){get_init(input);}
    void get_init(const string &input);
    void filter();  //去掉不合规格标识符
    double calculate()const; //计算器
    void calc(stack<double> &digit,stack<char> oper)const;    //  局部计算
    double determine()const; //判断：若是不满足表达式的情况，则返回-1；若除法出现错误，返回-2；
\end{verbatim}

\section{实现过程}
在构造一个calculator时，给定的输入会经过filter()函数，过滤不合规格的标识符。然后通过两个堆栈实现运算符和浮点数的存储。\\
步骤如下：\\
1.过滤字符串\\
2.将数字（通告c\_str()转换）与运算符分别存入两个栈,其中用\_表现负数\\
3.根据运算符优先级进行运算，若出现之前的运算符的优先级较高，则弹出之前的数字进行运算，运算之后再存入数字栈digit。若遇到左括弧，则直接存入栈中，直至读取到右括弧前都对运算符栈中的运算符按括弧内的优先级做处理。

\section{实验结果}
\begin{figure}[H]
\includegraphics[width=0.4\textwidth]{cal1.jpg}
\includegraphics[width=0.2\textwidth]{cal2.jpg}
\end{figure}

\end{document}

